/**
 * 注册页面脚本
 */

// DOM元素
const registerForm = document.getElementById('registerForm');
const usernameInput = document.getElementById('username');
const passwordInput = document.getElementById('password');
const confirmPasswordInput = document.getElementById('confirmPassword');
const realNameInput = document.getElementById('realName');
const idCardInput = document.getElementById('idCard');
const phoneInput = document.getElementById('phone');
const emailInput = document.getElementById('email');
const genderInputs = document.getElementsByName('gender');
const birthDateInput = document.getElementById('birthDate');
const addressInput = document.getElementById('address');
const agreeCheckbox = document.getElementById('agree');
const registerBtn = document.querySelector('.register-btn');

// 后端API地址
const API_URL = '/user/register';

/**
 * 注册函数
 */
function register() {
    // 表单验证
    if (!validateForm()) {
        return;
    }
    
    // 显示加载状态
    registerBtn.textContent = '注册中...';
    registerBtn.disabled = true;
    
    // 获取性别值
    let selectedGender = '';
    for (const radio of genderInputs) {
        if (radio.checked) {
            selectedGender = radio.value;
            break;
        }
    }
    
    // 准备请求数据
    const registerData = {
        username: usernameInput.value.trim(),
        password: passwordInput.value.trim(),
        realName: realNameInput.value.trim(),
        idCard: idCardInput.value.trim(),
        phone: phoneInput.value.trim(),
        email: emailInput.value.trim(),
        gender: selectedGender,
        birthDate: birthDateInput.value,
        address: addressInput.value.trim()
    };
    
    // 发送POST请求到后端
    fetch(API_URL, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(registerData)
    })
    .then(response => {
        // 检查响应状态
        if (!response.ok) {
            throw new Error('网络响应异常');
        }
        return response.json();
    })
    .then(result => {
        // 根据后端R<T>格式处理响应
        // code: 1成功，0和其它数字为失败
        if (result.code === 1) {
            // 显示成功提示
            showToast('注册成功');
            
            // 注册成功后跳转到登录页
            setTimeout(() => {
                window.location.href = 'login.html';
            }, 1500);
        } else {
            // 注册失败，显示错误信息
            showToast(result.msg || '注册失败，请稍后再试');
            registerBtn.textContent = '注册';
            registerBtn.disabled = false;
        }
    })
    .catch(error => {
        // 处理网络错误
        console.error('注册请求失败:', error);
        showToast('注册失败，请检查网络连接');
        registerBtn.textContent = '注册';
        registerBtn.disabled = false;
    });
}

/**
 * 表单验证
 * @returns {boolean} 验证是否通过
 */
function validateForm() {
    // 用户名验证（至少3个字符）
    if (usernameInput.value.trim().length < 3) {
        showToast('用户名至少需要3个字符');
        return false;
    }
    
    // 密码验证（至少6个字符）
    if (passwordInput.value.length < 6) {
        showToast('密码至少需要6个字符');
        return false;
    }
    
    // 确认密码验证
    if (passwordInput.value !== confirmPasswordInput.value) {
        showToast('两次输入的密码不一致');
        return false;
    }
    
    // 真实姓名验证
    if (realNameInput.value.trim().length < 2) {
        showToast('请输入有效的姓名');
        return false;
    }
    
    // 身份证号验证
    if (!validateIdCard(idCardInput.value.trim())) {
        showToast('请输入有效的身份证号');
        return false;
    }
    
    // 手机号验证
    if (!validatePhone(phoneInput.value.trim())) {
        showToast('请输入有效的手机号');
        return false;
    }
    
    // 邮箱验证（如果有填写）
    if (emailInput.value.trim() && !validateEmail(emailInput.value.trim())) {
        showToast('请输入有效的邮箱地址');
        return false;
    }
    
    // 协议验证
    if (!agreeCheckbox.checked) {
        showToast('请阅读并同意用户协议和隐私政策');
        return false;
    }
    
    return true;
}

/**
 * 身份证号验证
 * @param {string} idCard 身份证号
 * @returns {boolean} 是否有效
 */
function validateIdCard(idCard) {
    // 简单的身份证号验证（18位或15位）
    const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    return reg.test(idCard);
}

/**
 * 手机号验证
 * @param {string} phone 手机号
 * @returns {boolean} 是否有效
 */
function validatePhone(phone) {
    // 简单的手机号验证（11位数字）
    const reg = /^1\d{10}$/;
    return reg.test(phone);
}

/**
 * 邮箱验证
 * @param {string} email 邮箱
 * @returns {boolean} 是否有效
 */
function validateEmail(email) {
    const reg = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
    return reg.test(email);
}

/**
 * 显示提示消息
 * @param {string} message - 要显示的消息
 */
function showToast(message) {
    // 检查是否已存在toast元素
    let toast = document.querySelector('.toast');
    
    // 如果不存在，创建一个新的
    if (!toast) {
        toast = document.createElement('div');
        toast.className = 'toast';
        document.body.appendChild(toast);
    }
    
    // 设置消息并显示
    toast.textContent = message;
    toast.classList.add('show');
    
    // 2秒后隐藏
    setTimeout(() => {
        toast.classList.remove('show');
    }, 2000);
}

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
    // 为确认密码框添加实时验证
    confirmPasswordInput.addEventListener('input', function() {
        if (passwordInput.value !== confirmPasswordInput.value) {
            confirmPasswordInput.setCustomValidity('两次输入的密码不一致');
        } else {
            confirmPasswordInput.setCustomValidity('');
        }
    });
    
    // 为身份证号添加失去焦点验证
    idCardInput.addEventListener('blur', function() {
        if (!validateIdCard(idCardInput.value.trim()) && idCardInput.value.trim()) {
            showToast('请输入有效的身份证号');
        }
    });
    
    // 为手机号添加失去焦点验证
    phoneInput.addEventListener('blur', function() {
        if (!validatePhone(phoneInput.value.trim()) && phoneInput.value.trim()) {
            showToast('请输入有效的手机号');
        }
    });
}); 